package com.javacoo.swing.jxbrowser.engine;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import com.javacoo.swing.jxbrowser.BaseBrowser;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.Callback;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

/**
 * 渲染进程ID
 * <li></li>
 *
 * JxBrowser实现了Chromium多进程架构。Chromium引擎在单独的渲染进程中运行加载的网页的DOM和JavaScript。如果您加载具有不同域名的网页，Chromium可以终止先前加载的网页的渲染过程并在新的渲染过程中加载新的网页。
 *
 * 要获取有关当前加载的Web页面正在运行的呈现过程的信息，请使用Browser.getRenderProcessInfo（）方法。此方法收集有关当前正在运行的渲染过程的信息，并将其作为RenderProcessInfo类型返回 。
 *
 * 以下示例演示了如何使用此功能
 *
 * @author: duanyong@jccfc.com
 * @since: 2020/9/24 8:56
 */
public class RenderProcessId extends BaseBrowser {
    public static void main(String[] args) {
        final Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        // Wait until https://google.com is loaded completely
        Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>() {
            @Override
            public void invoke(Browser value) {
                browser.loadURL(BASE_URL);
            }
        });

        // Get PID of Chromium render process associated with
        // the current Browser instance
        long pid = browser.getRenderProcessInfo().getPID();
        System.out.println(pid);
    }
}
